/*
 * Copyright 2018-9-30 20:11:43 The JA-SIG Collaborative. All rights reserved.
 * distributed with thi file and available online at
 */
package com.lap.scp.erp.dal;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.lap.scd.commons.page.Page;
import com.lap.scp.erp.domain.ReceivablesDO;
import com.lap.scp.erp.query.ReceivablesQueryVO;

/**
 * <pre>
 *  收款信息，记录合同的收款信息，可以有多条记录，并记录每个阶段的金额数据操作对象，提供对收款信息，记录合同的收款信息，可以有多条记录，并记录每个阶段的金额新增，编辑，查询等操作。
 *
 *  控制层统一命名规则：
 *  增加保存 	insertXX,
 *  修改保存 	updateXX,
 *  查询分页 	queryPage,
 *  根据ID查询 	queryById,
 *  删除 		deleteById
 *
 * </pre>
 * 
 * @author 劳水生 Exp
 * @Date 2018-9-30 20:11:43
 * @since 2.0.0
 */
@Mapper
public interface ReceivablesDAO {
	/**
	 * <pre>
	 *  新增  收款信息，记录合同的收款信息，可以有多条记录，并记录每个阶段的金额
	 * </pre>
	 *
	 * @param receivablesDO
	 */
	void insertReceivables(ReceivablesDO receivablesDO);

	/**
	 * <pre>
	 * 	根据ID删除收款信息，记录合同的收款信息，可以有多条记录，并记录每个阶段的金额
	 * </pre>
	 *
	 * @param receivablesId
	 * @return 删除数量
	 */
	int deleteById(Integer receivablesId);

	/**
	 * <pre>
	 * 	根据ID查询收款信息，记录合同的收款信息，可以有多条记录，并记录每个阶段的金额
	 * </pre>
	 *
	 * @param receivablesId
	 * @return ReceivablesDO
	 */
	ReceivablesDO queryById(Integer receivablesId);

	/**
	 * <pre>
	 * 根据合同ID查询收款信息
	 * </pre>
	 * 
	 * @param contractId
	 * @return
	 */
	List<ReceivablesDO> queryByContractId(Integer contractId);

	/**
	 * <pre>
	 * 	统计查询 收款信息，记录合同的收款信息，可以有多条记录，并记录每个阶段的金额 总数量
	 * </pre>
	 *
	 * @param queryVO
	 * @return 统计数量
	 */
	int countPage(@Param("receivablesQueryVO") ReceivablesQueryVO queryVO);

	/**
	 * <pre>
	 * 分页查询
	 * </pre>
	 *
	 * @param page
	 * @param queryVO
	 * @return 数据集合
	 */
	List<ReceivablesDO> queryPage(@Param("page") Page page, @Param("receivablesQueryVO") ReceivablesQueryVO queryVO);

	/**
	 * <pre>
	 * 	根据ID修改 收款信息，记录合同的收款信息，可以有多条记录，并记录每个阶段的金额
	 * </pre>
	 *
	 * @param receivablesDO
	 * @return 改变数量
	 */
	int updateReceivables(ReceivablesDO receivablesDO);

	/**
	 * <pre>
	 * 更新已收款金额
	 * </pre>
	 * 
	 * @param id
	 * @param receivedAmount
	 * @param updatedBy
	 * @return
	 */
	int updateAmount(@Param("id") Integer id, @Param("receivedAmount") Integer receivedAmount,
			@Param("updatedBy") String updatedBy);

}
